package com.iamteer.day14;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;

/**
 * 使用集合实现注册登陆功能
 * 
 * 第一步： 提示用户选择功能， A（注册） B(登陆) Q(退出)。 要求： 功能选择 的时候要忽略大小写。
 * 
 * 注册： 1. 提示用户输入注册的账号(数字)与密码，如果输入的id号已经存在集合中，提示用户重新输入。
 * 注册完毕之后，把集合中的所有用户信息打印出来。(使用：toArrry()方法)
 * 
 * 登陆： 提示用户输入登陆的账号与密码,如果账号与密码这个用户已经存在集合中，那么登陆成功，否则登陆失败。
 */

// 定义用户类
class User {
	private int id; // 账户，为数字
	private String password; // 密码

	public int getId() { // 获取账户
		return id;
	}

	public void setId(int id) { // 设置账户
		this.id = id;
	}

	public String getPassword() { // 获取密码
		return password;
	}

	public void setPassword(String password) { // 设置密码
		this.password = password;
	}

	// 判断用户是否已经注册
	public boolean isInCollection(Collection<User> users) {
		//遍历方式一：toArray
//		Object[] arr = users.toArray();
//		for (int i = 0; i < arr.length; i++) {
//			User user = (User) arr[i];
//			if (this.id == user.id) {
//				return true;
//			}
//		}
		
		//遍历方式二：iterator
		Iterator iterator = users.iterator();
		while (iterator.hasNext()) {
			User user = (User) iterator.next();
			if (this.id == user.id) {
				return true;
			}
			
		}
		
		return false;
	}

	@Override
	public boolean equals(Object obj) { // 重写 equals 方法，id 相同而且 password 相同才
										// equals
		User user = (User) obj;
		if (this.id == user.id && this.password.equals(user.password)) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public String toString() { // 重写 toString 方法
		return "账户：" + this.id + " 密码：" + this.password;
	}
}

public class LoginSystem {

	static Collection<User> users = new ArrayList<User>(); // 定义用户集合，用于存放用户
	public static final String inputHint = "请选择： A（注册）  B(登陆)  Q(退出)";

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in); // 定义一个 Scanner 用于接收键盘输入

		System.out.println(inputHint);
		while (true) {
			String input = scanner.next();
			if ("A".equalsIgnoreCase(input)) {
				User user = new User();				//定义一个 User 对象，用于存放注册信息
				System.out.println("请设置账号：");
				user.setId(scanner.nextInt());		//输入账户
				System.out.println("请设置密码：");
				user.setPassword(scanner.next());	//输入密码
				signUP(user);						//调用注册函数
			} else if ("B".equalsIgnoreCase(input)) {
				User user = new User();				//定义一个 User 对象，用于存放登录信息
				System.out.println("请输入账号：");
				user.setId(scanner.nextInt());		//输入账户
				System.out.println("请输入密码：");
				user.setPassword(scanner.next());	//输入密码
				if (signIn(user)) {					//调用登录函数
					System.out.println("登录成功！");
				} else {
					System.out.println("登录失败！");
				}
			} else if ("Q".equalsIgnoreCase(input)) {//退出
				System.out.println("欢迎使用，再见！");
				break;
			}
			System.out.println(inputHint);
		}
		scanner.close();
	}
	
	//登录函数
	public static boolean signIn(User user) {
		if (users.contains(user)) {
			return true;
		} else {
			return false;
		}
	}

	//注册函数
	public static void signUP(User user) {
		if (user.isInCollection(users)) {
			System.out.println("账号已存在，请重新注册！");
		} else {
			users.add(user);	//添加用户到集合中
			Object[] arr = users.toArray();
			System.out.println(Arrays.toString(arr));
		}
	}
}
